// 假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm（下标从 1 开始），只要满足下述条件 之一 ，该数组就是一个 优美的排列 ：

// 1. perm[i] 能够被 i 整除
// 2. i 能够被 perm[i] 整除

// 给你一个整数 n ，返回可以构造的 优美排列 的 数量 。

// 示例 1：

// 输入：n = 2
// 输出：2
// 解释：
// 第 1 个优美的排列是[1, 2]：
// - perm[1] = 1 能被 i = 1 整除
//     - perm[2] = 2 能被 i = 2 整除
// 第 2 个优美的排列是[2, 1]:
// - perm[1] = 2 能被 i = 1 整除
//     - i = 2 能被 perm[2] = 1 整除
// 示例 2：

// 输入：n = 1
// 输出：1


/**
 * @param {number} n
 * @return {number}
 */
var countArrangement = function (n) {
    const vis = new Array(n + 1).fill(0);
    const match = new Array(n + 1).fill(0).map(() => new Array());
    let num = 0;

    for (let i = 1; i <= n; i++) {
        for (let j = 1; j <= n; j++) {
            if (i % j === 0 || j % i === 0)
                match[i].push(j);
        }
    }

    const backTrack = (index, n) => {
        if (index === n + 1) {
            num++;
            return;
        }

        for (const x of match[index]) {
            if (!vis[x]) {
                vis[x] = true;
                backTrack(index + 1, n);
                vis[x] = false;
            }
        }
    }
    backTrack(1, n);
    return num;

};

const ans = countArrangement(3);
console.log(ans);


